/**
 * 线性表的抽象数据类型定义
 * ADT List {
 *      基本操作:
 *          1.初始化线性表
 *          void initList(&L);
 *          2.销毁线性表
 *          void destroyList(&L);
 *          3.清空线性表
 *          void clearList(&L);
 *          4.判断线性表是否为空，为空时返回1,否则返回0
 *          int listEmpty(&L);
 *          5.获取线性表的元素个数
 *          int listLength(&L);
 *          6.获取第i个元素的值
 *          int getElem(&L, i, &e)
 *          7.返回指定值的元素位置
 *          int locateElem(&L, e)
 *          8.获取当前元素的前一个元素值
 *          int priorElem(&L, cur_e, &pre_e)
 *          9.获取当前元素的后一个元素值
 *          int nextElem(&L, cur_e, &next_e)
 *          10.插入新元素
 *          int listInsert(&L, i, e)
 *          11.删除第i个元素
 *          int listDelete(&L, i)
 *          12.遍历线性表
 *          void traverseList(&L)
 * }
 */
#pragma once

#ifndef LIST_H__
#define LIST_H__

#if defined(List) && defined(ElemType)

void    (*initList)(List * L);
void    (*destroyList)(List * L);
void    (*clearList)(List *L);
int     (*listEmpty)(List *L);
int     (*listLength)(List *L);
int     (*getElem)(List *L, int i, ElemType *e);
int     (*locateElem)(List *L, ElemType e);
int     (*priorElem)(List *L, ElemType cur_e, ElemType *pre_e);
int     (*nextElem)(List *L, ElemType cur_e, ElemType *next_e);
int     (*listInsert)(List *L, int i, ElemType e);
int     (*listDelete)(List *L, int i, ElemType *e);
void    (*traverseList)(List *L);

#endif

#endif